#include "GameSingleton.h"

#include "Network/ServerRoot.h"
#include "Network/PackageManager.h"
#include "Network/BanManager.h"
#include "Network/MessageManager.h"
#include "Network/ModsManager.h"
#include "Network/ConnectionManager.h"

#include "ServerConfigure.h"
#include "GameRandom.hpp"
#include "GameThreadPool.hpp"
#include "GameRegistry.hpp"

#include "Managers/BlocksManager.h"
#include "Managers/ChangeManager.h"
#include "Managers/ComponentsManager.h"
#include "Managers/CraftingRecipesManager.h"
#include "Managers/EntityManager.h"
#include "Managers/FurnaceRecipesManager.h"
#include "Managers/GameManager.h"
#include "Managers/PlantsManager.h"
#include "Managers/SkinsManager.h"

#include "Expand/EventManager.h"
#include "Expand/PluginsManager.h"



namespace PocketSurvival::GameSingleton
{
    SimpleSingleton* singletonPtr = nullptr;

    ServerRoot *serverRoot = nullptr;
    PackageManager *packageManager = nullptr;
    BanManager *banManager = nullptr;
    MessageManager *messageManager = nullptr;
    ModsManager *modsManager = nullptr;
    ConnectionManager *connectionManager = nullptr;


    ServerConfigure *serverConfigure = nullptr;
    GameRandom *gameRandom = nullptr;
    GameRegistry *gameRegistry = nullptr;
    GameThreadPool *gameThreadPool = nullptr;
    GameNoWaitThreadPool *gameNoWaitThreadPool = nullptr;
    GameSaveThreadPool *gameSaveThreadPool = nullptr;


    BlocksManager *blocksManager = nullptr;
    ChangeManager *changeManager = nullptr;
    ComponentsManager *componentsManager = nullptr;
    CraftingRecipesManager *craftingRecipesManager = nullptr;
    EntityManager *entityManager = nullptr;
    FurnaceRecipesManager *furnaceRecipesManager = nullptr;
    GameManager *gameManager = nullptr;
    PlantsManager *plantsManager = nullptr;
    SkinsManager *skinsManager = nullptr;


    EventManager *eventManager = nullptr;
    PluginsManager *pluginsManager = nullptr;
}